//@author A0101056Y

//In the event class, each event inputted by the user
//will be stored as a single event object.
//All the necessary attributes of a single event are 
//declared in the private.
//All get functions are used to access the data in private
//and all set functions are used to write new values into
//a particular attribute.
#pragma once

#include "OperationType.h"
#include "EventTime.h"

using std::vector;
using namespace VectorManipulator;

class Event {

private: 
	Time _startTime;
	Time _endTime;
	Time _remindTime;
	vector <string> _tag;
	string _details;
	REPEAT_RULE _repeatRule;
	bool _isDone;
	bool _isReminded;
	bool _isMissed;
	bool _isFavourite;
	bool _isDuration;

public: 
	//constructors for object event
	Event();
	void reset();
	
	//getters
	const Time& getStartTime() const;  
	const Time& getEndTime() const;
	vector <string>* getTagPtr();
	string getDetails() const;
	REPEAT_RULE getRepeatRule() const;
	const Time& getRemindTime() const;
	bool isDone() const;
	bool isMissed() const;
	bool isReminded() const;
	bool isFavourite() const;
	bool isDuration() const;

	//setters
	void setStartTime(const Time& startTime);
	void setEndTime(const Time& endTime);
	void setRemindTime(const Time& remindTime);
	void setDetails(const string& details);
	void setRepeatRule(const REPEAT_RULE& repeatRule);
	void setDone(bool isDone);
	void setReminded(bool isReminded);
	void setMissed (bool isRepeated);
	void setFavourite (bool newBool);
	void setDurationType (bool newType);

	bool operator == (const Event& rightOperand) const;
};
